from tkinter import*
# -*- coding:utf-8 -*-

    
#Plan :
# m[k=1][z]   0 0 0 0 0 0 0
# m[k=2][z]   0 0 0 0 0 0 0
# m[k=3][z]   0 0 0 0 0 0 0
# m[k=4][z]   0 0 0 0 0 2 0
# m[k=5][z]   0 0 0 0 0 0 0
# m[k=6][z]   0 0 0 0 0 0 0

#La piÃ¨ce correspondant au 2 est donc m[4][z=5]



#Pour le test horizontal, je dois donc, à  l'aide d'un compteur k et d'un "tant que", vérifier les 4 premiers termes de m de chaque lignes.
#Le for sert donc à  vérifier l'égalité de la valeur des pièces pour z de 0 à   3, afin de vérifier toutes les possibilités pour toutes les lignes.
#Pourquoi 3 ? Si nous essayons avec 4, Python affichera une erreur indiquant que nous sommes en dehors de la liste. D'où le "for z in range (0,4)".

#En somme, le test regarde si m[1][0] est de la même couleur (1 ou 2) que ses voisins. Si oui, il stop et signale la fin de la partie.
#Sinon, il poursuit avec m[1][1] et ainsi de suite, de ligne en ligne.
def testhorizontal(m,vartest):
    k=0
    while k<6:
        if vartest==True:
            pass
            #ne rien faire
        else:
            for z in range (0,4):
                if (m[k][z]==m[k][z+1]==1 and m[k][z+2]==1 and m[k][z+3]==1):
                    fen2=Tk()
                    Label(fen2,text="Victoire joueur rouge !").pack()
                    fen2.after(3000,fen2.destroy)
                    vartest=True
                    break
                if (m[k][z]==m[k][z+1]==2 and m[k][z+2]==2 and m[k][z+3]==2):
                    fen2=Tk()
                    Label(fen2,text="Victoire joueur bleu !").pack()
                    fen2.after(3000,fen2.destroy)
                    vartest=True
                    break
        k=k+1
    return vartest
    
            
       
#Le test vertical fonctionne de la même manière que le test horizontal mais dans un angle différent.
#Différence : ici nous avons "while k<4:" afin de rester dans les limites de nos listes.


def testvertical(m,vartest):
    k=0
    while k<3:
        if vartest==True:
            pass
            #ne rien faire
        else:
            vartest=False
            for z in range (0,5):
                if (m[k][z]==m[k+1][z]==1 and m[k+2][z]==1 and m[k+3][z]==1):
                    fen2=Tk()
                    Label(fen2,text="Victoire joueur rouge !").pack()
                    fen2.after(3000,fen2.destroy)
                    vartest=True
                    break
                if (m[k][z]==m[k+1][z]==2 and m[k+2][z]==2 and m[k+3][z]==2):
                    fen2=Tk()
                    Label(fen2,text="Victoire joueur bleu !").pack()
                    fen2.after(3000,fen2.destroy)
                    vartest=True
                    break
        k=k+1
    
    return vartest

#Les tests diagonal \ et / sont basés sur le même principe que les tests précédents, seul le nombre d'essais "while k<..." et "for z in range..." change.
def testdiago1(m,vartest): #\
        k=0
        while k<4:
            if vartest==True:
                pass
                #ne rien faire
            else:
                vartest=False
                for z in range (0,4):
                    if (m[k][z]==m[k+1][z+1]==1 and m[k+2][z+2]==1 and m[k+3][z+3]==1):
                        fen2=Tk()
                        Label(fen2,text="Victoire joueur rouge !").pack()
                        fen2.after(3000,fen2.destroy)
                        vartest=True                        
                        break
                    if (m[k][z]==m[k+1][z+1]==2 and m[k+2][z+2]==2 and m[k+3][z+3]==2):
                        fen2=Tk()
                        Label(fen2,text="Victoire joueur bleu !").pack()
                        fen2.after(3000,fen2.destroy)
                        vartest=True                        
                        break
            k=k+1
        return vartest

def testdiago2(m,vartest): #/
        k=0
        while k<4:
            if vartest==True:
                pass
            #ne rien faire
            else:
                vartest=False
                for z in range (3,7):
                    if (m[k][z]==m[k+1][z-1]==1 and m[k+2][z-2]==1 and m[k+3][z-3]==1):
                        fen2=Tk()
                        Label(fen2,text="Victoire joueur rouge !").pack()
                        fen2.after(3000,fen2.destroy)
                        vartest=True
                        break
                    if (m[k][z]==m[k+1][z-1]==2 and m[k+2][z-2]==2 and m[k+3][z-3]==2):
                        fen2=Tk()
                        Label(fen2,text="Victoire joueur bleu !").pack()
                        fen2.after(3000,fen2.destroy)
                        vartest=True
                        break
            k=k+1
        return vartest

# Ajouté par patrick pour simplifier le programme
def retour(m,vartest):
    vartest=testhorizontal(m,vartest)
    vartest=testvertical(m,vartest)
    vartest=testdiago1(m,vartest)
    vartest=testdiago2(m,vartest)
    return vartest
    
